package br.ceut.especializacao.poo.livros;

import java.util.Arrays;
import java.util.List;

import br.ceut.especializacao.poo.util.RepositorioException;

public class RepositorioLivrosArray implements RepositorioLivros {
	
	private Livro[] livros;
	private int indice;
	
	public RepositorioLivrosArray(int tamanho) {
		
		livros = new Livro[tamanho];
		indice = 0;
	}

	public void inserir(Livro livro) throws RepositorioException {

		livros[indice] = livro;
		indice = indice + 1;
	}

	public void atualizar(Livro livro) throws LivroNaoEncontradoException {
		int i = getIndice(livro.getIsbn());
		livros[i] = livro;
	}

	public IteratorLivros getIterator() {
		IteratorLivros iterator = new IteratorLivrosArray(livros);
		return iterator;

	}

	public void remover(String isbn) throws LivroNaoEncontradoException {
		int i = getIndice(isbn);
		livros[i] = livros[indice - 1];
		indice = indice - 1;
		livros[indice] = null;

	}

	public Livro procurar(String isbn) throws LivroNaoEncontradoException {
		int i = getIndice(isbn);
		return livros[i];
	}

	public boolean existe(String isbn) {
		boolean resposta;
		try {
			getIndice(isbn);
			resposta = true;
		} catch (LivroNaoEncontradoException ex) {
			resposta = false;
		}
		return resposta;
	}

	public List<Livro> getLivros() {
		return Arrays.asList(livros);
	}

	public void setLivros(Livro[] livros) {
		this.livros = livros;
	}

	public int getIndice(String isbn) throws LivroNaoEncontradoException {
		int resposta = -1;
		boolean achou = false;
		for (int i = 0; !achou && (i < indice); i = i + 1) {
			if (livros[i].getIsbn().equals(isbn)) {
				resposta = i;
				achou = true;
			}
		}
		if (!achou)
			throw new LivroNaoEncontradoException(isbn);
		return resposta;
	}

	public void setIndice(int indice) {
		this.indice = indice;
	}

}
